"""
有一下需求，需要将分组的名称插入对应列本组的第一个之前的位置，
现实中的场景是分组名称为 队长，队长归队后 站点 他带的队伍的 前边。
"""
"""数据源与需求
下列数据中有 a e 两组，需要将 a e 分别插入其组的第一个之前，
即将 a 插入 a 组的第一个 b 前边，
将 e 插入 e 组的第一个 f 前边。

a b
a c
a d
e f
e g
e h

转换为
a
b
c
d
e
f
g
h
"""
"""
将两个列分组按第一列做聚合，这样分组生成了两个列表，
然后对两个列表做相加，会对两个列表进行拼接，
再对最终拼接的两行列表做爆炸，
最终得到结果
"""
import pandas as pd

# 用剪贴板取数
df = pd.read_clipboard(names=["x", "y"])
print(df)

# 聚合 x 列，用 set 去重再转为列表
x = df.groupby("x").agg({"x": set}).agg({"x": list}).rename(columns={"x": "y"})
print(x)

# 将 y 列按分组转为列表
y = df.groupby("x").agg({"y": list})
print(y)

# 矩阵相加再爆炸
res = (x + y)
res = res.explode("y").reset_index(drop=True)
print(res)
